package wawi.actions;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import wawi.db.DbConnector;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Lieferungen extends ActionSupport
{
	private List<Bestellung> offeneBestellungen;
	private int lager;
	
	public Lieferungen()
	{
		offeneBestellungen = new ArrayList<Bestellung>();
		lager = -1;
	}

	public String lieferantenListe()
	{		
		HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
		lager = Integer.parseInt(request.getParameter("lager"));
		return SUCCESS;
	}
	
	
	
	public String offen()
	{
		HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
		
		try
		{
			int lieferant = Integer.parseInt(request.getParameter("lieferant"));
			lager = Integer.parseInt(request.getParameter("lager"));
			
			offeneBestellungen = DbConnector.getInstance().getBestellungenOfLiefereantFuerLager(lieferant, lager, true);
			
			return SUCCESS;
		}
		catch (NumberFormatException nfe)
		{
			addActionError("Falsche REC-ID");
		}
		
		return ERROR;
	}

	
	public String erfassen()
	{
		HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get( ServletActionContext.HTTP_REQUEST);
		Enumeration parameterNames = request.getParameterNames();	
		
		while(parameterNames.hasMoreElements())
		{
			Object tmp_obj = parameterNames.nextElement();
			
			if (tmp_obj instanceof String)
			{
				String tmp = (String) tmp_obj;		
				String value = request.getParameter(tmp);
				String[] data = tmp.split("_");
				
				if (data.length == 4 && value.length()>0)
				{
					try
					{
						int ean = Integer.parseInt(data[1]);
						int bestellung = Integer.parseInt(data[2]);
						int lager = Integer.parseInt(data[3]);
						int geliefert = Integer.parseInt(value);
						
						BestellungPosition pos = DbConnector.getInstance().readBestellungPosition(bestellung, ean);
						
						if (geliefert > pos.getAusstehend())
						{
							addActionError("Es kann nicht mehr geliefert werden, als bestellt wurde!");
							return ERROR;
						}
						else
						{
							pos.setGeliefert(pos.getGeliefert() + geliefert);
							
							if (!DbConnector.getInstance().updateBestellungPosition(pos))
								addActionError("Fehler beim Positions-Update");
							else
							{
								//Bestand updaten
								int bestand = DbConnector.getInstance().bestandsabfrage(ean, lager);
								bestand += geliefert;
								DbConnector.getInstance().insertOrUpdateBestand(ean, lager, bestand);
								
								
								//Bestellung update
								Bestellung be = DbConnector.getInstance().readBestellung(bestellung);
								
								if (be.allePositionenGeliefert())
									be.setState(Bestellung.KOMPLETT_GELIEFERT);
								else
									be.setState(Bestellung.TEIL_GELIEFERT);
								
								if (!DbConnector.getInstance().updateBestellung(be))
									addActionError("Fehler beim Update der Bestellung");
							}
						}
					}
					catch (NumberFormatException nfe)
					{
						nfe.printStackTrace();
					}
				}
			}
		}
		
		return SUCCESS;
	}


	public List<Bestellung> getOffeneBestellungen() {
		return offeneBestellungen;
	}



	public void setOffeneBestellungen(List<Bestellung> offeneBestellungen) {
		this.offeneBestellungen = offeneBestellungen;
	}



	public int getLager() {
		return lager;
	}



	public void setLager(int lager) {
		this.lager = lager;
	}
	
	
}
